OS Command Injection
OS Command Injection Nedir?
Bir web uygulamasında kullanıcıdan alınan girdilerin filtrelemeden sunucuya yönlenmesi sonucunda sunucunun işletim sistemi kodlarının çalıştırılmasına os command injection denir. Çok kritik bir açıktır. Şöyle düşünelim; uzaktan kod yürütmek için bir çok saldırı aracılığıyla erişmeye çalışıyoruz fakat direkt olarak erişmeye çalıştığımız şeye ulaşmamız durumu daha kritikleştiriyor.
Enjeksiyon yaparken amacımız girdi yolladığımız verilerin yanında çeşitli parametreler kullanarak sorgu yaratmaya çalışırız.
Örneklere geçmeden önce kullanabileceğimiz parametrelerden basit bir örnek vermek isterim.
Bir x kullanıcısı alperen ismini web sitesinde sorgu yaparken alperen | ls yaparak Pipe işareti sayesinde kod çalıştırma imkanı buluyor ve pwd sorgusuyla bulunduğu dizinde listeleme yapabiliyor.
Bu saldırıda deneme yanılma yolu yerine siteyi tanıma aşaması zaman açısından evrensel kodlar denenebilir (ping gibi).
Hem Windows hem Unix tabanlı işletim sistemlerinde çalışan komut ayırıcılar:
Sadece Unix tabanlı işletim Sistemlerinde Çalışan Komut ayırıcılar:
Nasıl Test Edilir?
Test aşamasında paketleri görmemiz gerekiyor. Gidip gelen parametreleri manuel olarak görmeyebiliriz. İlk başta temel olarak url üzerinden gösterelim.
https://oscommand.alperencoskun.com/users?uid=10&postid=12 şeklinde bir url gördük. Burada id ile sorgu yaptığını test etmek için:
https://oscommand.alperencoskun.com/users?uid=10&postid=12||whoami
Şeklinde sorgu yaparak manuel bir test gerçekleştirebiliriz. İşin mantığını temel olarak çözdüysek bWAPP üzerinde örneğe başlayalım.
Yukarıda Lookup seçeneğine tıkladığımızda gördüğümüz üzere bir sorgu oluşturuyoruz. Yaptığımız sorgunun üzerine bir sorgu daha yaparak bulunduğumuz dizindeki klasörleri incelemek istiyoruz. Yani OS Command injection açığının varlığını sorgulayacağız.
www.nsa.gov | ls şeklinde bir sorgu yapıyoruz.
Ve yukarıda gördüğümüz gibi amacımıza ulaşıyoruz. Zaten kod yürütüyoruz ama bunu kendi komut satırımızda kullanmak için shell açabiliriz. Netcat toolunu kullanabiliriz.
Commix toolu verdiğimiz parametrelerde tarama yapar. Hatta session bilgisi ekleyerek daha kuvvetli bir tarama yapabiliriz ve taramada açık bulmasıyla beraber shell açma özelliği bulunmakta.
Şimdi de PortSwigger labını çözelim:
Herhangi bir view details butonuna tıkladık Alt kısımda bir prdouctId ve storeId çalıştırdığını anladık.
Olası bir blind Os command için gelen paketi repeater’a yollayacağız.
Yukarıdaki gibi bir sorgu oluşturduk ve Send diyoruz.
Ve amacımıza ulaştık web uygulaması üzerinden işletim sistemi komutu çalıştırmayı başarmış olduk.
Peki Gerçek Web Sitelerinde Laboratuvarlardaki Gibi Çıkar Mı?
Uyguladığımız örneklerdeki gibi çıkma ihtimali olsa da göndereceğimiz verileri çeşitli encode yöntemleriyle beraber denememiz bizi başarıya daha yaklaştırabilecektir. Bu tamamen sunucunun encode decode durumuna göre de çalışabilirliğini değiştirir. Ayrıca belirtmeliyim ki kritik seviye bir açık ve doğrudan kritik bir açığa ulaşılabiliniyor. Fakat bu açıklar biraz daha az karşılaşılabilen açıklardır.
Birkaç Örnek OS Command Injection Raporları
https://hackerone.com/reports/506646
https://hackerone.com/reports/690010